import type GC from '@grapecity/spread-sheets'
import type { VxeTableInstance } from 'vxe-table'

// 表格类型枚举
export enum TableType {
  VXE_TABLE = 'vxe-table',
  SPREAD_JS = 'spread-js',
}

// 公共表格接口
export interface BaseTableOperations {
  // 其他公共方法...
}

// 表格引用类型
export type TableRefType = VxeTableInstance | GC.Spread.Sheets.Workbook | null

// 类型守卫
export function isVxeTable(table: TableRefType): table is VxeTableInstance {
  return table !== null && 'reloadData' in table
}

export function isSpreadJS(table: TableRefType): table is GC.Spread.Sheets.Workbook {
  return table !== null && 'getActiveSheet' in table
}

// 表格适配器工厂
export function createTableAdapter(tableRef: TableRefType): BaseTableOperations | null {
  if (isVxeTable(tableRef)) {
    return {
      // refresh: async () => tableRef.reloadData(),
      // getData: () => tableRef.getTableData(),
      // export: (options) => tableRef.exportData(options),
      // 其他VxeTable特有方法适配
    }
  }

  if (isSpreadJS(tableRef)) {
    // const sheet = tableRef.getActiveSheet()
    return {
      // refresh: async () => { /* SpreadJS刷新逻辑 */ },
      // getData: () => { /* SpreadJS获取数据逻辑 */ },
      // export: (options) => { /* SpreadJS导出逻辑 */ },
      // 其他SpreadJS特有方法适配
    }
  }

  return null
}

// 获取表格类型
export function getTableType(tableRef: TableRefType): TableType | null {
  if (isVxeTable(tableRef))
    return TableType.VXE_TABLE
  if (isSpreadJS(tableRef))
    return TableType.SPREAD_JS
  return null
}
